!function ($) {
	"use strict";
	/**
	 * 默认参数
	 */
	var defaults = {
		"xzqhdm"		 : '440000',
        //业务参数集，参数为function，function的返回值必须为Object格式：{a:1,b:2,……}
        "params"         : undefined,
        //自定义样式
        "className"      : undefined,
        //上下文
        "context"		 : undefined,
        //异步处理分页
        "asyncLoad"      : false,
        //异步处理对象容器，支持使用jquery表达式
        //服务端返回页面模式使用
        "asyncTarget"    : 'body',
        //异步提交方式，默认POST
        "asyncType"      : 'POST',
        //是否使用服务端返回页面的形式
        //该参数仅在异步处理模式下有效（asyncLoad = true）
        "serverSidePage" : false,
        //异步数据模式自定义处理回调，ajax请求服务端并返回json数据后，可使用数据进行自定义页面渲染
        "render"         : undefined,
        //分页跳转URL
        "url"            : '',
        //异步方式分页后，并在返回的页面内容嵌入到指定位置后，执行该回调，跳转方式不执行该回调
        //参数param，插件的参数集
        "callback"       : $.noop
	};
	/**
	 * 模板
	 */
	var template = '<a class="navigation-hall-toggle" href="javascript:void(0);">切换区域和部门 <span class="caret"></span></a>'+
        '<div class="navigation-hall-dropdown picker-hall">'+
        '<i class="picker-hall--close">&times;</i>'+
        '<div class="picker-hall-content">'+
		    '<div class="picker-hall-hd">'+
		      '<ul id="nav" class="picker-hall-nav">'+
		      '</ul>'+
		    '</div>'+
		    '<div class="picker-hall-bd">'+
		      '<ul id="selector" class="picker-hall-selector">'+
		        '<li><a href="javascript:void(0);">广州市</a></li>'+
		      '</ul>'+
		      '<ul id="station" class="picker-hall-station">'+
		      	'<li class="picker-hall-station-line"><a href="javascript:void(0);">广东政务服务网</a></li>'+
		      '</ul>'+
		      '<ul id="windows" class="picker-hall-window">'+
		      	'<li class="picker-hall-window-title">部门窗口</li>'+
		        '<li><a href="javascript:void(0);">省编办</a></li>'+
		      '</ul>'+
		    '</div>'+
    	'</div>'+
    	'</div>';
	/**
	 * 构造方法
	 */
	var HallNav = function(element,p){
		this.$container = element;
		this.p = p;
	};
	/**
	 * 插件常量
	 */
	HallNav.version = '1.1';
	/**
	 * 绑定事件的名称，使用了HallNav的命名空间
	 */
	HallNav.eventName = 'click.HallNav';
	/**
	 * 分厅与导航数据缓存
	 */
	HallNav.cache = {};
	/**
	 * 初始化分页
	 */
	HallNav.prototype.init = function(){
		var self = this,p = this.p,elem = this.$container;
		var htmlstr = template;
		$(elem).append(htmlstr);
		//this.setFunction($('#nav li',$(elem)),p.xzqhdm);
		this.setJumpFunction($('#station li a',$(elem)),p.homePage);
		if(p.asyncLoad) this.actionSwitch(p.xzqhdm,'init');
	};
	/**
	 * 数据填充
	 */
	HallNav.prototype.populate = function(renderData){
		var self = this, elem = this.$container, p = this.p;			
		var dsft = renderData.data.hall;
		var windows = renderData.data.department;
		$(".picker-hall-selector",$(elem)).empty();
		
		var current_data = renderData.data.currentArr;
		var areacode = current_data[current_data.length-1].ORGAREACODE;		
		$.each(current_data,function(i,n){
			if('省直窗口' === n.ORGTYPE||'市级窗口' === n.ORGTYPE||'县级窗口' === n.ORGTYPE){
				return false;
			}
			if(areacode===n.ORGAREACODE){			
				$("#windows").show();
				if(areacode==='440000'){
					$('#station',$(elem)).html('<li class="picker-hall-station-line"><a href="'+p.homePage+'">广东政务服务网</a></li>');
				}else if("村居办事点"===n.ORGTYPE || "镇街办事站"===n.ORGTYPE){
					$('#station',$(elem)).html('<li class="picker-hall-station-line"><a href="'+n.SITES_URL+'">广东政务服务网'+n.ORGSNAME+'办事站</a></li>');
					$("#windows").hide();
				}else{
					$('#station',$(elem)).html('<li class="picker-hall-station-line"><a href="'+n.SITES_URL+'">广东政务服务网'+n.ORGSNAME+'</a></li>');
				}
			}
		});
		
		if(windows.length>0){
			var orgType = windows[0].ORGTYPE; 
			if('省直窗口' === orgType){
				$(".picker-hall-window",$(elem)).empty().append('<li class="picker-hall-window-title">省级部门</li>');
			}else if('市级窗口' === orgType){
				$(".picker-hall-window",$(elem)).empty().append('<li class="picker-hall-window-title">市级部门</li>');
			}else if('县级窗口' === orgType){
				$(".picker-hall-window",$(elem)).empty().append('<li class="picker-hall-window-title">县级部门</li>');
			}
		}else{
			$("#windows").hide();
		}
				
		$.each(dsft,function(i,n){
			if("村居办事点"===n.ORGTYPE){
				var curDsft = $('<li><a href="'+n.SITES_URL+'" title="' + n.ORGSNAME + '">'+n.ORGSNAME+'</a></li>').appendTo($('#selector',$(elem)));
			}else{
				var curDsft = $('<li><a href="javascript:void(0);" title="' + n.ORGSNAME + '">' + n.ORGSNAME + '</a></li>').appendTo($('#selector',$(elem)));
				self.setFunction($(curDsft),n.ORGAREACODE,n.SITES_URL);
			}
		});
		
		$.each(windows,function(i,n){
			var curWindow = $('<li><a href="'+n.SITES_URL+'" title="' + n.ORGSNAME + '">'+n.ORGSNAME+'</a></li>').appendTo($('#windows',$(elem)));
		});		
		loading.hide();

	};
	/**
	 * 设置事件
	 */
	HallNav.prototype.setFunction = function(obj,areacode,url){
		var self = this;
		$(obj).off(HallNav.eventName).on(HallNav.eventName,function(event){
			loading.show();
			self.renderNavAndStation(this,areacode,url);
			self.actionSwitch(areacode);
		});
	};
	HallNav.prototype.setJumpFunction = function(obj,url){
		var self = this,elem = this.$container;
		$(obj).off('click').on('click',function(event){
			window.location.href = url; 
		});
	}
	HallNav.prototype.renderNavAndStation = function(obj,areacode,url){
		var self = this,p = this.p,elem = this.$container;
		if($(obj).parent().is($('#selector',$(elem)))){
			$(obj).appendTo($('#nav',$(elem)));
		}else{
			$(obj).nextAll().remove();
		}		
	}
	/**
	 * 设置服务端请求参数对象（异步使用ajax请求时执行）
	 */
	HallNav.prototype.getParams = function(areacode){
		var param = {}, p = this.p;
		param.regCode = areacode;
		if(p.params && $.isFunction(p.params)){
			var pa = p.params();
			if($.isPlainObject(pa) && !$.isEmptyObject(pa)) param = $.extend({},param ,pa);
		}
		return param;
	};
	/**
	 * 设置页面点击事件处理
	 * event：事件对象
	 * 若pageNumber参数为-1，而设置当前页不处理操作
	 */
	HallNav.prototype.actionSwitch = function(areacode,initFlag){
		var self = this, p = this.p, elem = this.$container;
		//异步刷新页面模式
		if(p.asyncLoad){
			self.areacode = areacode;
			var param = {};
			if(initFlag){
				param = self.getParams(areacode);
			}else{
				param.regCode = areacode; 
			}
			var async = true;
			if(p.async !== undefined && !p.async) async= p.async;
			if(p.serverSidePage){
				$.ajax({
					url : p.url,
					data : param,
					async : async,
					type : p.asyncType,
					dataType : 'text',//使用了html会导致数据读取后，不执行success内部的问题
					success : function(returnData){
						if(self.extractPageInfo(returnData)){
							if($(p.asyncTarget).size()>0) $(p.asyncTarget).empty().html(returnData);
							if(p.callback && $.isFunction(p.callback)) p.callback(param);
							self.populate();
						}
					}
				});
			}else{
				if(HallNav.cache[areacode]){
					self.populate(HallNav.cache[areacode]);
				}else{
					$.ajax({
						url : p.url,
						data : param,
						async : async,
						type : p.asyncType,
						dataType : 'json',
						success : function(returnData){
							var renderData = returnData.data;
							var current_data = renderData.data.currentArr;
							//数据加入缓存
							HallNav.cache[current_data[current_data.length-1].ORGAREACODE] = renderData;							
							if(initFlag)if(p.render && $.isFunction(p.render)) p.render(renderData);
							if(initFlag){
								$.each(current_data,function(i,n){
									if(param.orgCode && i == (current_data.length-1)){
										return false;
									}
									if(!param.orgCode && "440000" == areacode && i == (current_data.length-1)){
										return false;
									}
									var cur = $('<li><a href="javascript:;">'+n.ORGSNAME+'</a></li>').appendTo($('.picker-hall-nav',$(elem)));
									self.setFunction($(cur),n.ORGAREACODE);
								});
							}														
							self.populate(renderData);
						}
					});
				}
			}
		}else{
			//直接跳转模式
			window.location.href = self.setUrl(pageNumber);
		}
	};
	/**
	 * 插件初始化入口
	 */
	function Plugin(p){
		return this.each(function(){
			//参数合并时允许读取在html元素上定义的'data-'系列的参数
			var $this = $(this),
				data = $this.data('HallNav'),
				params = $.extend({}, defaults, $this.data(), typeof p == 'object' && p);
			if(!data) $this.data('HallNav', (data = new HallNav(this,params)));
			if($.isPlainObject(params)) data.init();
		});
	}
	
	
	$.fn.HallNav             = Plugin;
	$.fn.HallNav.Constructor = HallNav;
	
}(window.jQuery);